/*
 * Crear_Convocatoria.java
 *
 * Created on 10-oct-2008, 10:35:34
 */
 
package investigaciones_itm.Convocatorias;

import com.sun.rave.faces.data.DefaultSelectItemsArray;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.webui.jsf.component.Body;
import com.sun.webui.jsf.component.Button;
import com.sun.webui.jsf.component.Calendar;
import com.sun.webui.jsf.component.Form;
import com.sun.webui.jsf.component.Head;
import com.sun.webui.jsf.component.Html;
import com.sun.webui.jsf.component.Label;
import com.sun.webui.jsf.component.Link;
import com.sun.webui.jsf.component.Page;
import com.sun.webui.jsf.component.PanelGroup;
import com.sun.webui.jsf.component.PanelLayout;
import com.sun.webui.jsf.component.Tab;
import com.sun.webui.jsf.component.TabSet;
import com.sun.webui.jsf.component.TextArea;
import com.sun.webui.jsf.component.TextField;
import com.sun.webui.jsf.model.MultipleSelectOptionsList;
import com.sun.webui.jsf.model.Option;
import javax.faces.FacesException;
import investigaciones_itm.ApplicationBean1;
import investigaciones_itm.RequestBean1;
import investigaciones_itm.SessionBean1;
import itm.bo.convocatorias.ConvocatoriasBO;
import itm.vo.convocatorias.ConvocatoriaVO;
import itm.vo.convocatorias.RubroVO;
import itm.vo.prodructos.ProductoVO;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import javax.faces.component.UISelectItems;
import javax.faces.component.html.HtmlMessages;
import javax.faces.component.html.HtmlPanelGrid;

/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 *
 * @author Administrador
 */
public class Crear_Convocatoria extends AbstractPageBean {
    
    private ConvocatoriasBO convocatoriasBO = new ConvocatoriasBO();
    
    
    
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

    /**
     * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
     * This method is automatically generated, so any user-specified code inserted
     * here is subject to being replaced.</p>
     */
    private void _init() throws Exception {
    }

    private Page page1 = new Page();
    
    public Page getPage1() {
        return page1;
    }
    
    public void setPage1(Page p) {
        this.page1 = p;
    }
    
    private Html html1 = new Html();
    
    public Html getHtml1() {
        return html1;
    }
    
    public void setHtml1(Html h) {
        this.html1 = h;
    }
    
    private Head head1 = new Head();
    
    public Head getHead1() {
        return head1;
    }
    
    public void setHead1(Head h) {
        this.head1 = h;
    }
    
    private Link link1 = new Link();
    
    public Link getLink1() {
        return link1;
    }
    
    public void setLink1(Link l) {
        this.link1 = l;
    }
    
    private Body body1 = new Body();
    
    public Body getBody1() {
        return body1;
    }
    
    public void setBody1(Body b) {
        this.body1 = b;
    }
    
    private Form form1 = new Form();
    
    public Form getForm1() {
        return form1;
    }
    
    public void setForm1(Form f) {
        this.form1 = f;
    }
    private TabSet tabSet1 = new TabSet();

    public TabSet getTabSet1() {
        return tabSet1;
    }

    public void setTabSet1(TabSet ts) {
        this.tabSet1 = ts;
    }
    private Tab tab1 = new Tab();

    public Tab getTab1() {
        return tab1;
    }

    public void setTab1(Tab t) {
        this.tab1 = t;
    }
    private PanelLayout layoutPanel1 = new PanelLayout();

    public PanelLayout getLayoutPanel1() {
        return layoutPanel1;
    }

    public void setLayoutPanel1(PanelLayout pl) {
        this.layoutPanel1 = pl;
    }
    private TextField campoNombre = new TextField();

    public TextField getCampoNombre() {
        return campoNombre;
    }

    public void setCampoNombre(TextField tf) {
        this.campoNombre = tf;
    }
    private Label label3 = new Label();

    public Label getLabel3() {
        return label3;
    }

    public void setLabel3(Label l) {
        this.label3 = l;
    }
    private Label label4 = new Label();

    public Label getLabel4() {
        return label4;
    }

    public void setLabel4(Label l) {
        this.label4 = l;
    }
    private Label label7 = new Label();

    public Label getLabel7() {
        return label7;
    }

    public void setLabel7(Label l) {
        this.label7 = l;
    }
    private Label label13 = new Label();

    public Label getLabel13() {
        return label13;
    }

    public void setLabel13(Label l) {
        this.label13 = l;
    }
    private Label label14 = new Label();

    public Label getLabel14() {
        return label14;
    }

    public void setLabel14(Label l) {
        this.label14 = l;
    }
    private Label label15 = new Label();

    public Label getLabel15() {
        return label15;
    }

    public void setLabel15(Label l) {
        this.label15 = l;
    }
    private TextArea textAreaObjetivo = new TextArea();

    public TextArea getTextAreaObjetivo() {
        return textAreaObjetivo;
    }

    public void setTextAreaObjetivo(TextArea ta) {
        this.textAreaObjetivo = ta;
    }
    private TextArea textAreaDirigido = new TextArea();

    public TextArea getTextAreaDirigido() {
        return textAreaDirigido;
    }

    public void setTextAreaDirigido(TextArea ta) {
        this.textAreaDirigido = ta;
    }
    private TextArea textAreaRequisitos = new TextArea();

    public TextArea getTextAreaRequisitos() {
        return textAreaRequisitos;
    }

    public void setTextAreaRequisitos(TextArea ta) {
        this.textAreaRequisitos = ta;
    }
    private Calendar fechaRegistro = new Calendar();

    public Calendar getFechaRegistro() {
        return fechaRegistro;
    }

    public void setFechaRegistro(Calendar c) {
        this.fechaRegistro = c;
    }
    private Calendar fechaCierre = new Calendar();

    public Calendar getFechaCierre() {
        return fechaCierre;
    }

    public void setFechaCierre(Calendar c) {
        this.fechaCierre = c;
    }
    private Calendar fechaPublicacion = new Calendar();

    public Calendar getFechaPublicacion() {
        return fechaPublicacion;
    }

    public void setFechaPublicacion(Calendar c) {
        this.fechaPublicacion = c;
    }
    private Button botonGuardarConv = new Button();

    public Button getBotonGuardarConv() {
        return botonGuardarConv;
    }

    public void setBotonGuardarConv(Button b) {
        this.botonGuardarConv = b;
    }
    private Button button7 = new Button();

    public Button getButton7() {
        return button7;
    }

    public void setButton7(Button b) {
        this.button7 = b;
    }
    private PanelGroup groupPanel1 = new PanelGroup();

    public PanelGroup getGroupPanel1() {
        return groupPanel1;
    }

    public void setGroupPanel1(PanelGroup pg) {
        this.groupPanel1 = pg;
    }
    private Label label1 = new Label();

    public Label getLabel1() {
        return label1;
    }

    public void setLabel1(Label l) {
        this.label1 = l;
    }
    private UISelectItems listbox1SelectItems = new UISelectItems();

    public UISelectItems getListbox1SelectItems() {
        return listbox1SelectItems;
    }

    public void setListbox1SelectItems(UISelectItems uisi) {
        this.listbox1SelectItems = uisi;
    }
    private MultipleSelectOptionsList addRemoveRubroSFDefaultOptions = new MultipleSelectOptionsList();

    public MultipleSelectOptionsList getAddRemoveRubroSFDefaultOptions() {
        return addRemoveRubroSFDefaultOptions;
    }

    public void setAddRemoveRubroSFDefaultOptions(MultipleSelectOptionsList msol) {
        this.addRemoveRubroSFDefaultOptions = msol;
    }
    
    /** Holds value of property availableOptions. */
    private Option[] availableOptions = null;
       
    /** Holds value of property selectedOptions. */
    private String[] selectedOptions = null;

    public Option[] getAvailableOptions() {
        
        //CasoUsoVO casoUsoVO = getRequestBean1().getCasoUsoVO();
        String idRubro = "";
        String nombreRubro = "";
        
        //rolBO = new RolBO();
        //List<CasoUsoVO> listaCasoUso = new ArrayList<CasoUsoVO>();
        
        List<RubroVO> listaRubroSF = new ArrayList<RubroVO>();
        convocatoriasBO = new ConvocatoriasBO();
        
        try{ 
            //listaCasoUso = rolBO.listaCasoUso(casoUsoVO);
            //Option[] opcion = new Option[listaCasoUso.size()];
            
            listaRubroSF = convocatoriasBO.llenarRubroSF();
            if(listaRubroSF.size()!=0){
                Option[] opcion = new Option[listaRubroSF.size()];

                for (int i = 0; i < listaRubroSF.size(); i++) {
                    //idCasoUso = listaCasoUso.get(i).getIdCasoUso();
                     //nombreCasoUso= listaCasoUso.get(i).getNombreCasoUso();
                    //opcion[i]=new Option(idCasoUso,nombreCasoUso);
                    idRubro = listaRubroSF.get(i).getIdRubro();
                    nombreRubro = listaRubroSF.get(i).getNombreRubro();
                    opcion[i] = new Option(idRubro, nombreRubro);

                } // end for

                availableOptions = opcion;
            }else{
                availableOptions = new Option[1];
                availableOptions[0] = new Option("0", "Lista Vacía");
            }
            
        }catch(Exception e){
            e.getStackTrace();
        }
        
        return availableOptions;
    }

    public void setAvailableOptions(Option[] availableOptions) {
        this.availableOptions = availableOptions;
    }
     public String[] getSelectedOptions() {
        return selectedOptions;
    }

    public void setSelectedOptions(String[] selectedOptions) {
        this.selectedOptions = selectedOptions;
    }//fin availableOptions

    
    /** Holds value of property availableOptions. PARA RUBROS NO FINANCIABLES*/
    private Option[] availableOptionsNF = null;
       
    /** Holds value of property selectedOptions. */
    private String[] selectedOptionsNF = null;

    public Option[] getAvailableOptionsNF() {
        
        
        String idRubro = "";
        String nombreRubro = "";
        
        List<RubroVO> listaRubroNF = new ArrayList<RubroVO>();
        convocatoriasBO = new ConvocatoriasBO();
        
        try{ 
            
            listaRubroNF = convocatoriasBO.llenarRubroNF();
            if(listaRubroNF.size()!=0){
                Option[] opcion1 = new Option[listaRubroNF.size()];

                for (int i = 0; i < listaRubroNF.size(); i++) {

                    idRubro = listaRubroNF.get(i).getIdRubro();
                    nombreRubro = listaRubroNF.get(i).getNombreRubro();
                    opcion1[i] = new Option(idRubro, nombreRubro);

                } // end for

                availableOptionsNF = opcion1;
            }else{
                availableOptionsNF = new Option[1];
                availableOptionsNF[0] = new Option("0", "Lista Vacía");
            }
            
        }catch(Exception e){
            e.getStackTrace();
        }
        
        return availableOptionsNF;
    }

    public void setAvailableOptionsNF(Option[] availableOptionsNF) {
        this.availableOptionsNF = availableOptionsNF;
    }

    public String[] getSelectedOptionsNF() {
        return selectedOptionsNF;
    }

    public void setSelectedOptionsNF(String[] selectedOptionsNF) {
        this.selectedOptionsNF = selectedOptionsNF;
    }//fin availableOptionsNF
    
    
    /** Holds value of property availableOptions. PARA RUBROS NO FINANCIABLES*/
    private Option[] availableOptionsP = null;
       
    /** Holds value of property selectedOptions. */
    private String[] selectedOptionsP = null;

    public Option[] getAvailableOptionsP() {
        
        String idProducto = "";
        String nombreProducto = "";
        
        List<ProductoVO> listaProducto = new ArrayList<ProductoVO>();
        convocatoriasBO = new ConvocatoriasBO();
        
        try{ 
            
            listaProducto = convocatoriasBO.llenarProducto();
            if(listaProducto.size()!=0){
                Option[] opcion1 = new Option[listaProducto.size()];

                for (int i = 0; i < listaProducto.size(); i++) {

                    idProducto = listaProducto.get(i).getIdProducto();
                    nombreProducto = listaProducto.get(i).getNombreProducto();
                    opcion1[i] = new Option(idProducto, nombreProducto);

                } // end for

                availableOptionsP = opcion1;
            }else{
                availableOptionsP = new Option[1];
                availableOptionsP[0] = new Option("0", "Lista Vacía");
            }
            
        }catch(Exception e){
            e.getStackTrace();
        }
        
        return availableOptionsP;
    }

    public void setAvailableOptionsP(Option[] availableOptionsP) {
        this.availableOptionsP = availableOptionsP;
    }

    public String[] getSelectedOptionsP() {
        return selectedOptionsP;
    }

    public void setSelectedOptionsP(String[] selectedOptionsP) {
        this.selectedOptionsP = selectedOptionsP;
    }//fin availableOptionsP
    
    private DefaultSelectItemsArray listbox1DefaultItems1 = new DefaultSelectItemsArray();

    public DefaultSelectItemsArray getListbox1DefaultItems1() {
        return listbox1DefaultItems1;
    }

    public void setListbox1DefaultItems1(DefaultSelectItemsArray dsia) {
        this.listbox1DefaultItems1 = dsia;
    }
    private DefaultSelectItemsArray listbox1DefaultItems2 = new DefaultSelectItemsArray();

    public DefaultSelectItemsArray getListbox1DefaultItems2() {
        return listbox1DefaultItems2;
    }

    public void setListbox1DefaultItems2(DefaultSelectItemsArray dsia) {
        this.listbox1DefaultItems2 = dsia;
    }
    private DefaultSelectItemsArray listbox1DefaultItems3 = new DefaultSelectItemsArray();

    public DefaultSelectItemsArray getListbox1DefaultItems3() {
        return listbox1DefaultItems3;
    }

    public void setListbox1DefaultItems3(DefaultSelectItemsArray dsia) {
        this.listbox1DefaultItems3 = dsia;
    }
    private DefaultSelectItemsArray dropdown1DefaultItems = new DefaultSelectItemsArray();

    public DefaultSelectItemsArray getDropdown1DefaultItems() {
        return dropdown1DefaultItems;
    }

    public void setDropdown1DefaultItems(DefaultSelectItemsArray dsia) {
        this.dropdown1DefaultItems = dsia;
    }
    private UISelectItems dropdown1SelectItems = new UISelectItems();

    public UISelectItems getDropdown1SelectItems() {
        return dropdown1SelectItems;
    }

    public void setDropdown1SelectItems(UISelectItems uisi) {
        this.dropdown1SelectItems = uisi;
    }
    private HtmlMessages messageList1 = new HtmlMessages();

    public HtmlMessages getMessageList1() {
        return messageList1;
    }

    public void setMessageList1(HtmlMessages hm) {
        this.messageList1 = hm;
    }

    // </editor-fold>

    /**
     * <p>Construct a new Page bean instance.</p>
     */
    public Crear_Convocatoria() {
    }

    /**
     * <p>Callback method that is called whenever a page is navigated to,
     * either directly via a URL, or indirectly via page navigation.
     * Customize this method to acquire resources that will be needed
     * for event handlers and lifecycle methods, whether or not this
     * page is performing post back processing.</p>
     * 
     * <p>Note that, if the current request is a postback, the property
     * values of the components do <strong>not</strong> represent any
     * values submitted with this request.  Instead, they represent the
     * property values that were saved for this view when it was rendered.</p>
     */
    @Override
    public void init() {
        // Perform initializations inherited from our superclass
        super.init();
        // Perform application initialization that must complete
        // *before* managed components are initialized
        // TODO - add your own initialiation code here
        
        // <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
        // Initialize automatically managed components
        // *Note* - this logic should NOT be modified
        try {
            _init();
        } catch (Exception e) {
            log("Crear_Convocatoria Initialization Failure", e);
            throw e instanceof FacesException ? (FacesException) e: new FacesException(e);
        }
        
        // </editor-fold>
        // Perform application initialization that must complete
        // *after* managed components are initialized
        // TODO - add your own initialization code here
    }

    /**
     * <p>Callback method that is called after the component tree has been
     * restored, but before any event processing takes place.  This method
     * will <strong>only</strong> be called on a postback request that
     * is processing a form submit.  Customize this method to allocate
     * resources that will be required in your event handlers.</p>
     */
    @Override
    public void preprocess() {
    }

    /**
     * <p>Callback method that is called just before rendering takes place.
     * This method will <strong>only</strong> be called for the page that
     * will actually be rendered (and not, for example, on a page that
     * handled a postback and then navigated to a different page).  Customize
     * this method to allocate resources that will be required for rendering
     * this page.</p>
     */
    @Override
    public void prerender() {
        
       /** //CasoUsoVO casoUsoVO = getRequestBean1().getCasoUsoVO();
        String idRubro = "";
        String nombreRubro = "";
        
        //rolBO = new RolBO();
        //List<CasoUsoVO> listaCasoUso = new ArrayList<CasoUsoVO>();
        
        List<RubroVO> listaRubroSF = new ArrayList<RubroVO>();
        convocatoriasBO = new ConvocatoriasBO();
        
        try{ 
            //listaCasoUso = rolBO.listaCasoUso(casoUsoVO);
            //Option[] opcion = new Option[listaCasoUso.size()];
            
            listaRubroSF = convocatoriasBO.llenarRubroSF();
            Option[] opcion = new Option[listaRubroSF.size()];
            
            for (int i = 0; i < listaRubroSF.size(); i++) {
                //idCasoUso = listaCasoUso.get(i).getIdCasoUso();
                 //nombreCasoUso= listaCasoUso.get(i).getNombreCasoUso();
                //opcion[i]=new Option(idCasoUso,nombreCasoUso);
                idRubro = listaRubroSF.get(i).getIdRubro();
                nombreRubro = listaRubroSF.get(i).getNombreRubro();
                opcion[i] = new Option(idRubro, nombreRubro);
                
            } // end for
            
            availableOptions = opcion;
            
        }catch(Exception e){
            e.getStackTrace();
        }*/
    }

    /**
     * <p>Callback method that is called after rendering is completed for
     * this request, if <code>init()</code> was called (regardless of whether
     * or not this was the page that was actually rendered).  Customize this
     * method to release resources acquired in the <code>init()</code>,
     * <code>preprocess()</code>, or <code>prerender()</code> methods (or
     * acquired during execution of an event handler).</p>
     */
    @Override
    public void destroy() {
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected ApplicationBean1 getApplicationBean1() {
        return (ApplicationBean1) getBean("ApplicationBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected RequestBean1 getRequestBean1() {
        return (RequestBean1) getBean("RequestBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected SessionBean1 getSessionBean1() {
        return (SessionBean1) getBean("SessionBean1");
    }

    public String botonGuardarConv_action() {
        // TODO: Process the action. Return value is a navigation
        // case name where null will return to the same page.
        
        ConvocatoriaVO convocatoriaVO = new ConvocatoriaVO();
        
        String errorM = "";
        
        String nombre = "", objetivo = "", dirigido = "", requisitos = "";
        Date registro = null, cierre = null, publicacion = null;
        
        java.util.Date fechaCalendario = (java.util.Date) fechaRegistro.getValue();
        java.util.Date fechaCalendario2 = (java.util.Date) fechaCierre.getValue();
        java.util.Date fechaCalendario3 = (java.util.Date) fechaPublicacion.getValue();
        
        try{
            nombre = (String) campoNombre.getValue();
            objetivo = (String) textAreaObjetivo.getValue();
            dirigido = (String) textAreaDirigido.getValue();
            requisitos = (String) textAreaRequisitos.getValue();
            
            if(nombre == null || nombre.equals("")){
                error("Por favor ingrese el Nombre de la convocatoria.");
                return null;
            }else if(objetivo == null || objetivo.equals("")){
                error("Por favor Ingrese el objetivo de la Convocatoria");
                return null;
            }else if(dirigido == null || dirigido.equals("")){
                error("Por favor indique a quien esta dirida la convocatoria");
                return null;
            }else if(requisitos == null || requisitos.equals("")){
                error("Por favor indique cuales son los Requisitos de la Convocatoria");
                return null;
            }else if(fechaCalendario == null){
                error("Por favor ingrese una fecha de registro");
                return null;
            }else if(fechaCalendario2 == null){
                error("Por favor ingrese una fecha de cierre");
                return null;
            }else if(fechaCalendario3 == null){
                error("Por favor ingrese una fecha de publicacion");
                return null;
            }

            
            
            registro = new Date(fechaCalendario.getTime());
            cierre = new Date(fechaCalendario2.getTime());
            publicacion = new Date(fechaCalendario3.getTime());
            
            convocatoriaVO.setNombreConvocatoria(nombre);
            convocatoriaVO.setObjetivo(objetivo);
            convocatoriaVO.setDirigidoA(dirigido);
            convocatoriaVO.setRequisitos(requisitos);
            convocatoriaVO.setRegistrado(registro);
            convocatoriaVO.setCierre(cierre);
            convocatoriaVO.setPublicacionR(publicacion);
           
            errorM = convocatoriasBO.crearConvocatoria(convocatoriaVO);
            
            if(errorM.equals("El nombre de la Convocaroria ya existe")){
                error(errorM);
                return null;
            }else{
                info("La Operación fue exitosa. ");
                limpiar1();
            }
        }
        catch(Exception ce){            
            error("Error al crear la convocatoria");
            ce.getStackTrace();
        }        
        return null;
        
    }

    
    public void limpiar1(){
        
            campoNombre.setValue("");
            //listboxLinea.setValue("");
            textAreaObjetivo.setValue("");
            textAreaDirigido.setValue("");
            textAreaRequisitos.setValue("");
            fechaRegistro.setValue("");
            fechaCierre.setValue("");
            fechaPublicacion.setValue("");
        
    }
    
    public String button7_action() {
        // TODO: Process the action. Return value is a navigation
        // case name where null will return to the same page.
        limpiar1();
        return null;
    }
    
    private static boolean esNumero(String cadena){
       try {
               Integer.parseInt(cadena);
               return true;
       } catch (NumberFormatException nfe){
               return false;
       }
   }    
}

